package nullby.yoga.utils;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.io.Reader;
import java.io.UnsupportedEncodingException;
import java.net.HttpURLConnection;
import java.net.URL;

public final class FileUtils {
	/**
	 * Reads an InputStream and converts it to a String.
	 * 
	 * @param stream
	 * @param len
	 * @return
	 * @throws IOException
	 * @throws UnsupportedEncodingException
	 */
	public static String readIt(InputStream stream, int len)
			throws IOException, UnsupportedEncodingException {
		Reader reader = null;
		reader = new InputStreamReader(stream, "UTF-8");
		char[] buffer = new char[len];
		reader.read(buffer);
		return new String(buffer);
	}

	public static String inputStringToString(InputStream is, String charset) {
		try {
			byte[] data = new byte[is.available()];
			is.read(data);
			is.close();

			return new String(data, charset);
		} catch (Exception e) {
		}
		return "";
	}

	/**
	 * 
	 * @param inputStream
	 * @param file
	 * @param cd
	 */
	public static void ItToFile(InputStream inputStream, String file, File cd) {
		try {
			File downloadingMediaFile = new File(cd, file);
			OutputStream out = new FileOutputStream(downloadingMediaFile);
			byte buf[] = new byte[1024];
			int len;
			try {
				while ((len = inputStream.read(buf)) > 0)
					out.write(buf, 0, len);
			} catch (Exception e) {
			} finally {
				if (out != null) {
					out.close();
				}
				if (inputStream != null) {
					inputStream.close();
				}
			}
		} catch (IOException e) {
		}
	}

	/**
	 * 
	 * @param filename
	 * @param text
	 */
	public static void StringToFile(String filename, String text) {
		PrintWriter out;
		try {
			out = new PrintWriter(filename);
			out.println(text);
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		}
	}

	public static void Download(final String urlpath, final String folder,
			final String filename) throws IOException {
		URL url = new URL(urlpath);
		// create the new connection
		HttpURLConnection urlConnection = (HttpURLConnection) url
				.openConnection();
		// set up some things on the connection
		urlConnection.setRequestMethod("GET");
		urlConnection.setDoOutput(true);
		// and connect!
		urlConnection.connect();
		// set the path where we want to save the file
		// in this case, going to save it on the root directory of the
		// sd card.
		File SDCardRoot = new File("/sdcard/" + folder + "/");
		// create a new file, specifying the path, and the filename
		// which we want to save the file as.
		File file = new File(SDCardRoot, filename);
		// this will be used to write the downloaded data into the file we
		// created
		FileOutputStream fileOutput = new FileOutputStream(file);
		// this will be used in reading the data from the internet
		InputStream inputStream = urlConnection.getInputStream();
		// this is the total size of the file
		int totalSize = urlConnection.getContentLength();
		// variable to store total downloaded bytes
		int downloadedSize = 0;
		// create a buffer...
		byte[] buffer = new byte[1024];
		int bufferLength = 0; // used to store a temporary size of the buffer
		// now, read through the input buffer and write the contents to the file
		while ((bufferLength = inputStream.read(buffer)) > 0) {
			// add the data in the buffer to the file in the file output stream
			// (the file on the sd card
			fileOutput.write(buffer, 0, bufferLength);
			// add up the size so we know how much is downloaded
			downloadedSize += bufferLength;
			int progress = (int) (downloadedSize * 100 / totalSize);
			// this is where you would do something to report the progress, like
			// this maybe
			// updateProgress(downloadedSize, totalSize);
		}
		// close the output stream when done
		fileOutput.close();
	}
}
